home *** CD-ROM | disk | FTP | other *** search
/ DS-CD ROM 2 1993 August / DS CD-ROM 2.Ausgabe (August 1993).iso / programm / ds0257 / lib.exe / FILES.LIB < prev    next >
Text File  |  1992-02-14  |  7KB  |  554 lines

  1. #IF !LIB4A86
  2. #ELSE
  3. #IF !INTERN_LIB4A86_S
  4. INTERN_LIB4A86_S EQU 01
  5. JMP START
  6. #ENDIF
  7. #ENDIF
  8. ARCHIV EQU 020H
  9. SUBDIR EQU 010H
  10. VOLUME EQU 008H
  11. SYSTEM EQU 004H
  12. HIDDEN EQU 002H
  13. READONLY EQU 001H
  14. DEFAULTATTR EQU ARCHIV OR READONLY
  15. FINDATTRIBUTE DW DEFAULTATTR
  16. FINDDTA STRUC [BX]
  17. DB 21XD DUP ?
  18. _DTAATTR DB ?
  19. _DTATIME DW ?
  20. _DTADATE DW ?
  21. _DTALENGTH DW ?,?
  22. _DTANAME DB 13XD DUP ?
  23. ENDS
  24. #IF !INTERN_DOSSTRTOSTR_S
  25. INTERN_DOSSTRTOSTR_S EQU 01
  26. DOSSTRTOSTR:
  27. PUSH SI
  28. CLD
  29. XOR AH,AH
  30. PUSH DI
  31. INC DI
  32. L0:
  33. CMP [SI],AL
  34. JE >L2
  35. MOVSB
  36. INC AH
  37. JNZ L0
  38. DEC AH
  39. L2:
  40. POP DI
  41. MOV ES:[DI],AH
  42. POP SI
  43. RET
  44. #ENDIF
  45. K1 DW 0
  46. A000 EQU W[BP-02H]
  47. L000 EQU 02H
  48. B000 EQU W[BP+02H]
  49. C000 EQU W[BP+04H]
  50. D000 EQU W[BP+06H]
  51. S000 EQU [BP+08H]
  52. T000 EQU [BP+0CH]
  53. INTERN_FILESSCODE:
  54. CLI
  55. POP CS:K1
  56. PUSH ES,DI,DS,SI
  57. PUSH DX,CX,BX
  58. PUSH BP
  59. MOV BP,SP
  60. PUSH AX
  61. PUSH CS:K1
  62. STI
  63. CLD
  64. RET
  65. INTERN_FILESECODE1:
  66. CALL INTERN_CLOSEFILE
  67. INTERN_FILESECODE:
  68. MOV SP,BP
  69. POP BP
  70. POP BX,CX,DX,SI,DS,DI,ES
  71. RET
  72. GETFILEPATH:
  73. CALL INTERN_FILESSCODE
  74. SUB SP,130XD
  75. MOV DI,SP
  76. MOV ES,SS
  77. CALL INTERN_MAKEASCIIZ
  78. PUSH SI
  79. PUSH AX
  80. MOV SI,DX
  81. MOV AH,060H
  82. INT 021H
  83. POP DX
  84. POP SI
  85. MOV [SI],DH
  86. MOV SI,DI
  87. MOV DS,SS
  88. LES DI,T000
  89. MOV AL,0
  90. MOV B ES:[DI],AL
  91. JC >L8
  92. CALL DOSSTRTOSTR
  93. L8:
  94. JMP INTERN_FILESECODE
  95. PARSEFILENAME:
  96. CALL INTERN_FILESSCODE
  97. LODSB
  98. XOR AH,AH
  99. MOV CX,AX
  100. MOV ES:[DI],AH
  101. JCXZ >L9
  102. MOV BX,SI
  103. MOV DX,CX
  104. L0:
  105. CALL INTERN_GETNEXTFILENAMECHAR
  106. JNE >L00
  107. L01:
  108. MOV BX,SI
  109. MOV DX,CX
  110. DEC DX
  111. L00:
  112. LOOP L0
  113. L1:
  114. MOV CX,DX
  115. MOV SI,BX
  116. MOV ES:[DI],CL
  117. INC DI
  118. JCXZ >L1
  119. PUSH CX
  120. REP MOVSB
  121. POP CX
  122. L1:
  123. MOV SI,W S000
  124. SUB B[SI],CL
  125. L9:
  126. JMP INTERN_FILESECODE
  127. FINDFIRST:
  128. MOV AH,04EH
  129. JMP >L1
  130. L0002 EQU [BP-2-L000]
  131. L0003 EQU [BP-4-L000]
  132. FINDNEXT:
  133. MOV AH,04FH
  134. L1:
  135. MOV B ES:[DI],0
  136. CALL INTERN_FILESSCODE
  137. MOV CX,ES
  138. MOV AH,2FH
  139. INT 021H
  140. PUSH ES
  141. PUSH BX
  142. MOV ES,CX
  143. PUSH SI
  144. MOV BX,DX
  145. MOV AH,01AH
  146. INT 021H
  147. CALL INTERN_MAKEASCIIZ
  148. PUSH AX
  149. MOV CX,CS:FINDATTRIBUTE
  150. MOV AX,A000
  151. INT 021H
  152. POP CX
  153. MOV [SI],CH
  154. POP SI
  155. JC >L9
  156. MOV CL, _DTAATTR
  157. CALL INTERN_EXPANDNAME
  158. L9:
  159. PUSHF
  160. PUSH AX
  161. MOV AH,01AH
  162. LDS DX,L0003
  163. INT 021H
  164. POP AX
  165. POPF
  166. JMP INTERN_FILESECODE
  167. GETFILETIME:
  168. MOV AL,INTERN_KONVERTTIME1O
  169. JMP >L1
  170. GETFILEDATE:
  171. MOV AL,INTERN_KONVERTDATE1O
  172. JMP >L1
  173. SETFILETIME:
  174. MOV AL,INTERN_KONVERTTIME2O
  175. JMP >L1
  176. SETFILEDATE:
  177. MOV AL,INTERN_KONVERTDATE2O
  178. L1:
  179. XOR AH,AH
  180. ADD AX,OFFSET INTERN_FILESBASIS
  181. CALL INTERN_FILESSCODE
  182. CALL INTERN_OPENFILE1
  183. JC >L80
  184. MOV AX,05700H
  185. INT 021H
  186. JC >L8
  187. CALL WORD PTR A000
  188. L8:
  189. CALL INTERN_CLOSEFILE
  190. L80:
  191. JMP INTERN_FILESECODE
  192. GETFILESIZE:
  193. CALL INTERN_FILESSCODE
  194. CALL INTERN_OPENFILE1
  195. JC >L8
  196. MOV AX,04202H
  197. XOR CX,CX
  198. XOR DX,DX
  199. INT 021H
  200. CALL INTERN_CLOSEFILE
  201. JC >L8
  202. MOV A000,AX
  203. MOV D000,DX
  204. L8:
  205. JMP INTERN_FILESECODE
  206. PUFFER_TABELLE STRUC [BX]
  207. PUFFER_SEG DW ?
  208. PUFFER_OFF DW ?
  209. PUFFER_LEN DW ?
  210. ENDS
  211. L0001 EQU W[BP-(04H+L000)]
  212. L0002 EQU W[BP-(06H+L000)]
  213. L0003 EQU W[BP-(08H+L000)]
  214. COPYFILE:
  215. CALL INTERN_FILESSCODE
  216. PUSH DS,BX
  217. CALL INTERN_OPENFILE1
  218. JC L8
  219. PUSH BX
  220. MOV DS,ES
  221. MOV SI,DI
  222. XOR CX,CX
  223. CALL INTERN_CREATEFILE
  224. JC >L81
  225. PUSH BX
  226. LDS BX,L0001
  227. MOV CX,PUFFER_LEN
  228. MOV DX,PUFFER_OFF
  229. MOV DS,PUFFER_SEG
  230. L0:
  231. MOV BX,L0002
  232. MOV AH,03FH
  233. INT 021H
  234. JC >L8
  235. MOV CX,AX
  236. JCXZ >L8
  237. MOV BX,L0003
  238. MOV AH,040H
  239. INT 021H
  240. JC >L8
  241. OR AX,AX
  242. STC
  243. JNE L0
  244. L8:
  245. MOV BX,L0003
  246. CALL INTERN_CLOSEFILE
  247. L81:
  248. MOV BX,L0002
  249. JMP INTERN_FILESECODE1
  250. RENAMEFILE:
  251. JMP INTERN_RENAMEFILEDIR
  252. GETSETATTRIBUTES:
  253. MOV AH,043H
  254. AND AL,01H
  255. JMP >L1
  256. DELETEFILE:
  257. MOV AX,04100H
  258. L1:
  259. CALL INTERN_FILESSCODE
  260. CALL INTERN_MAKEASCIIZ
  261. PUSH AX
  262. MOV AX,A000
  263. INT 021H
  264. POP DX
  265. MOV [SI],DH
  266. JC >L8
  267. MOV AX,CX
  268. L8:
  269. JMP INTERN_FILESECODE
  270. EXISTFILE:
  271. CALL INTERN_FILESSCODE
  272. SUB SP,42XD + 256XD + 256XD
  273. MOV ES,SS
  274. LEA DI,[BP - 42XD - 256XD]
  275. PUSH DI
  276. MOV CL,[SI]
  277. XOR CH,CH
  278. INC CL
  279. CLD
  280. REP MOVSB
  281. POP SI
  282. MOV DS,SS
  283. LEA DI,[BP - 42XD - 256XD - 256XD]
  284. LEA DX,[BP - 42XD]
  285. CALL FINDFIRST
  286. JMP INTERN_FILESECODE
  287. FILETIMETODOSTIME:
  288. MOV AL,CL
  289. AND AL,01FH
  290. SHL AL,1
  291. MOV AH,CH
  292. SHR AH,1
  293. SHR AH,1
  294. SHR AH,1
  295. AND AH,1FH
  296. SHR CX,1
  297. SHR CX,1
  298. SHR CX,1
  299. SHR CX,1
  300. SHR CX,1
  301. AND CL,3FH
  302. MOV CH,AH
  303. MOV DH,AL
  304. XOR DL,DL
  305. RET
  306. DOSTIMETOFILETIME:
  307. CMP DH,59XD
  308. JA >L8
  309. CMP CH,23XD
  310. JA >L8
  311. CMP CL,59XD
  312. JBE >L1
  313. L8:
  314. STC
  315. RET
  316. L1:
  317. PUSH DX
  318. XOR AX,AX
  319. SHR DH,1
  320. OR AL,DH
  321. SHL CH,1
  322. SHL CH,1
  323. SHL CH,1
  324. OR AH,CH
  325. XOR CH,CH
  326. SHL CX,1
  327. SHL CX,1
  328. SHL CX,1
  329. SHL CX,1
  330. SHL CX,1
  331. OR CX,AX
  332. CLC
  333. POP DX
  334. RET
  335. FILEDATETODOSDATE:
  336. MOV AL,DL
  337. AND AL,01FH
  338. XOR CH,CH
  339. MOV CL,DH
  340. SHR CL,1
  341. ADD CX,1980XD
  342. SHL DX,1
  343. SHL DX,1
  344. SHL DX,1
  345. AND DH,0FH
  346. MOV DL,AL
  347. RET
  348. DOSDATETOFILEDATE:
  349. CMP DL,31XD
  350. JA >L8
  351. CMP DH,12XD
  352. JA >L8
  353. SUB CX,1980XD
  354. JNC >L1
  355. L8:
  356. STC
  357. RET
  358. L1:
  359. PUSH CX
  360. XOR AX,AX
  361. OR AL,DL
  362. SHL CL,1
  363. OR AH,CL
  364. XOR DL,DL
  365. SHR DX,1
  366. SHR DX,1
  367. SHR DX,1
  368. OR DX,AX
  369. POP CX
  370. CLC
  371. RET
  372. INTERN_FILESBASIS LABEL BYTE
  373. INTERN_KONVERTTIME1:
  374. CALL FILETIMETODOSTIME
  375. L00:
  376. MOV D000,DX
  377. MOV C000,CX
  378. RET
  379. INTERN_KONVERTDATE1:
  380. CALL FILEDATETODOSDATE
  381. JMP L00
  382. INTERN_KONVERTTIME2:
  383. PUSH DX
  384. MOV DX,D000
  385. MOV CX,C000
  386. CALL DOSTIMETOFILETIME
  387. POP DX
  388. L00:
  389. JC RET
  390. MOV AX,05701H
  391. INT 021H
  392. RET
  393. INTERN_KONVERTDATE2:
  394. PUSH CX
  395. MOV DX,D000
  396. MOV CX,C000
  397. CALL DOSDATETOFILEDATE
  398. POP CX
  399. JMP L00
  400. INTERN_KONVERTDATE1O EQU (OFFSET INTERN_KONVERTDATE1 - OFFSET INTERN_FILESBASIS)
  401. INTERN_KONVERTDATE2O EQU (OFFSET INTERN_KONVERTDATE2 - OFFSET INTERN_FILESBASIS)
  402. INTERN_KONVERTTIME1O EQU (OFFSET INTERN_KONVERTTIME1 - OFFSET INTERN_FILESBASIS)
  403. INTERN_KONVERTTIME2O EQU (OFFSET INTERN_KONVERTTIME2 - OFFSET INTERN_FILESBASIS)
  404. #IF !INTERN_MAKEASCIIZ_S
  405. INTERN_MAKEASCIIZ_S EQU 01
  406. INTERN_MAKEASCIIZ:
  407. CLD
  408. XOR AH,AH
  409. LODSB
  410. MOV DX,SI
  411. ADD SI,AX
  412. XCHG AH,[SI]
  413. RET
  414. #ENDIF
  415. INTERN_GETNEXTFILENAMECHAR:
  416. LODSB
  417. CMP AL,':'
  418. JE RET
  419. CMP AL,'\'
  420. JE RET
  421. CMP AL,'/'
  422. RET
  423. INTERN_EXPANDNAME:
  424. PUSH CX
  425. PUSH SI
  426. LODSB
  427. MOV CL,AL
  428. XOR CH,CH
  429. MOV DX,SI
  430. L1:
  431. CALL INTERN_GETNEXTFILENAMECHAR
  432. JNE >L10
  433. MOV DX,SI
  434. L10:
  435. LOOP L1
  436. L2:
  437. XOR CX,CX
  438. POP SI
  439. PUSH SI
  440. INC SI
  441. PUSH DI
  442. INC DI
  443. L0:
  444. CMP SI,DX
  445. JAE >L1
  446. LODSB
  447. STOSB
  448. INC CX
  449. JMP L0
  450. L1:
  451. MOV SI,OFFSET _DTANAME
  452. ADD SI,BX
  453. MOV DX,CX
  454. MOV CX,13XD
  455. L1:
  456. LODSB
  457. OR AL,AL
  458. JE >L2
  459. STOSB
  460. INC DX
  461. LOOP L1
  462. L2:
  463. POP DI
  464. MOV ES:[DI],DL
  465. POP SI
  466. POP CX
  467. RET
  468. INTERN_OPENFILE1:
  469. XOR AL,AL
  470. INTERN_OPENFILE:
  471. MOV BL,AL
  472. CALL INTERN_MAKEASCIIZ
  473. PUSH AX
  474. MOV AH,03DH
  475. MOV AL,BL
  476. JMP >L1
  477. INTERN_CREATEFILE:
  478. CALL INTERN_MAKEASCIIZ
  479. PUSH AX
  480. MOV AH,03CH
  481. L1:
  482. INT 021H
  483. POP BX
  484. MOV [SI],BH
  485. MOV BX,AX
  486. RET
  487. INTERN_CLOSEFILE:
  488. PUSHF
  489. PUSH AX
  490. MOV AH,03EH
  491. INT 021H
  492. POP AX
  493. POPF
  494. RET
  495. #IF !INTERN_RENAMEFILEDIR_S
  496. INTERN_RENAMEFILEDIR_S EQU 01
  497. INTERN_RENAMEFILEDIR:
  498. PUSH DX,SI
  499. CALL INTERN_MAKEASCIIZ
  500. PUSH AX
  501. PUSH SI
  502. PUSH DX
  503. PUSH DS
  504. MOV DS,ES
  505. MOV SI,DI
  506. CALL INTERN_MAKEASCIIZ
  507. MOV DI,DX
  508. POP DS
  509. POP DX
  510. PUSH AX
  511. PUSH SI
  512. MOV AH,056H
  513. INT 021H
  514. POP DI
  515. POP AX
  516. MOV ES:[DI],AH
  517. POP SI
  518. POP AX
  519. MOV [SI],AH
  520. L9:
  521. POP SI,DX
  522. RET
  523. #ENDIF
  524. #IF !INTERN_CMARK0
  525. INTERN_CMARK0 EQU 01H
  526. INTERN_CMARK1:
  527. PUSH BP
  528. MOV BP,SP
  529. MOV BX,06H
  530. SUB CH,[BP+SI]
  531. SUB AH,[BX+SI]
  532. DEC SP
  533. DEC CX
  534. INC DX
  535. XOR AL,041H
  536. CMP B[02820H],DH
  537. INC BX
  538. SUB W[BX+SI],SP
  539. INC DX
  540. CS AND B[BP+DI+043H],DL
  541. DEC AX
  542. INC BP
  543. DEC BP
  544. DEC BP
  545. INC BP
  546. PUSH DX
  547. AND B[BP+SI],CH
  548. SUB CH,[BP+SI]
  549. POP DX
  550. MOV SP,BP
  551. POP BP
  552. RET
  553. #ENDIF
  554.